package cn.tedu.mall.order.listener;

import cn.tedu.mall.pojo.order.dto.OrderAddCondition;
import org.apache.rocketmq.spring.core.RocketMQLocalTransactionState;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * 所有实现类，都要在这个注册器中注册数据
 * 真正调用的实现，都是通过策略条件在这个注册器中区分的
 */
@Component
public class OrderAddListenerRegister implements OrderAddListenerExecutorInter{
    private static final Map<String, OrderAddListenerExecutorInter> registry = new HashMap<>();

    /**
     * 客户端调用的方法
     * @param orderAddCondition 可能是seckillOrderAddDTO 或 orderAddDTO
     * @return
     */
    @Override
    public RocketMQLocalTransactionState execute(OrderAddCondition orderAddCondition) {
        String className = orderAddCondition.getClass().getName();
        return registry.get(className).execute(orderAddCondition);
    }

    /**
     * 谁声明bean，谁来注册到注册器，key值为策略条件的两个类的全路径名称
     * @param key
     * @param orderAddListenerExecutorInter
     */
    public static void register(String key, OrderAddListenerExecutorInter orderAddListenerExecutorInter) {
        registry.put(key, orderAddListenerExecutorInter);
    }
}
